a660ef6c1fad0971767e3b0f7875471098692e58,src/main/java/com/steelbridgelabs/oss/neo4j/structure/Neo4JVertex.java,Neo4JVertex,vertices,#Direction#String#,544
Before Change
// create string builder
StringBuilder builder = new StringBuilder();
// match clause
builder.append("MATCH ").append(matchPattern("n", "id")).append("<-[r").append(set.stream().map(label -> ":`" + label + "`").collect(Collectors.joining("|"))).append("]-(m").append(processLabels(Collections.emptySet(), true)).append(")");
// edge ids already in memory
List<Object> identifiers = inEdges.stream().map(Neo4JEdge::id).collect(Collectors.toList());
// process where clause
After Change
// check we have all edges in memory
if (!inEdgesLoaded) {
// labels we need to query for
Set<String> relationshipLabels = set.stream().filter(item -> !inEdgeLabels.contains(item)).collect(Collectors.toSet());
// check query is required for labels
if (set.isEmpty() || !relationshipLabels.isEmpty()) {
// create string builder
StringBuilder builder = new StringBuilder();
// match clause
builder.append("MATCH ").append(matchPattern("n", "id")).append("<-[r").append(relationshipLabels.stream().map(label -> ":`" + label + "`").collect(Collectors.joining("|"))).append("]-(m").append(processLabels(Collections.emptySet(), true)).append(")");
// edge ids already in memory
List<Object> identifiers = inEdges.stream().map(Neo4JEdge::id).collect(Collectors.toList());
// process where clause
processEdgesWhereClause("m", identifiers, "r", builder, parameters);
// return
builder.append(" RETURN m");
// create statement
Statement statement = new Statement(builder.toString(), parameters);
// execute statement
StatementResult result = session.executeStatement(statement);
// execute command
Stream<Vertex> query = session.vertices(result);
// return copy since elements can be deleted in the middle of the loop
Iterator<Vertex> iterator = Stream.concat((labels.length != 0 ? inEdges.stream().filter(edge -> set.contains(edge.label())) : inEdges.stream()).map(Edge::outVertex), query)
.collect(Collectors.toList())
.iterator();
// process summary (query has been already consumed by collector)
ResultSummaryLogger.log(result.consume());
// return iterator
return iterator;
}
}
// edges in memory (return copy since elements can be deleted in the middle of the loop
return (labels.length != 0 ? inEdges.stream().filter(edge -> set.contains(edge.label())) : inEdges.stream()).map(Edge::outVertex)
.collect(Collectors.toList())
.iterator();
}
// check we have all edges in memory
if (!outEdgesLoaded || !inEdgesLoaded) {
// check we have labels already in memory
if (set.isEmpty() || !outEdgeLabels.containsAll(set) || !inEdgeLabels.containsAll(set)) {
// create string builder
StringBuilder builder = new StringBuilder();
// match clause